//---------------------------------------------------------------------------
#ifndef CMFormH
#define CMFormH
//---------------------------------------------------------------------------
#include "Outils.h"
#include <SysUtils.hpp>
#include <Controls.hpp>
#include <ComCtrls.hpp>
#include <Classes.hpp>
#include <Forms.hpp>
#include "CForm.h"
//---------------------------------------------------------------------------
#define CMainForm (dynamic_cast<CEICMainForm *>(Application->MainForm))
//---------------------------------------------------------------------------
typedef void __fastcall (/*__closure*/ *TRemoveGroupEvent)( bool bSuccessfullTerminated);
//---------------------------------------------------------------------------
typedef struct {
  TForm             *pAppMainForm;
  TMainMenu         *pAppMenu;
  TWinControl       *pOldParent;
  TStatusBar        *pStatusBar;
  int                nGroup;
  TRemoveGroupEvent  OnRemoveGroup;
  void              *pParam;
} TInfosApplication;
//---------------------------------------------------------------------------
// Ajoute une application en créant un nouveau groupe
extern PACKAGE_OUTILS void __fastcall CMainForm_AddApplicationNewGrp(TForm *pForm, TRemoveGroupEvent pEvent, void *pDatas);
// Ajoute une application dans le groupe en cours
extern PACKAGE_OUTILS void __fastcall CMainForm_AddApplication(TForm *pForm);
// Supprime toutes les applications contenus dans un groupe
// Si pForm==NULL supprime le dernier groupe
extern PACKAGE_OUTILS void __fastcall CMainForm_RemoveApplicationsGroup(TForm *pForm = NULL);
// Supprime une application donnée
extern PACKAGE_OUTILS void __fastcall CMainForm_RemoveApplication(TForm *pForm);
// Change le caption de la fenêtre principale ainsi que celle de
// l'application actuellement activée
extern PACKAGE_OUTILS void __fastcall CMainForm_ChangeCaption(const AnsiString& newCaption);
// Active une application déjà chargée
// Voir méthode de sélection de l'application à mettre active
extern PACKAGE_OUTILS void __fastcall CMainForm_ActiveApplication(int index);
// Permet de remplacer le menu d'une fenêtre par un autre ( Assistant 32 bits)
extern PACKAGE_OUTILS void __fastcall CMainForm_SetNewMainMenu( TForm *pForm, TMainMenu *pNewMenu);
// Permet de remplacer la statusbar d'une fenêtre par une autre ( Assistant 32 bits)
extern PACKAGE_OUTILS void __fastcall CMainForm_SetNewStatusBar( TForm *pForm, TStatusBar *pStatusBar);
// Retourne la CForm en cours d'execution
extern PACKAGE_OUTILS CForm *__fastcall CMainForm_GetCurrentForm( void);
//---------------------------------------------------------------------------
class PACKAGE_OUTILS CEICMainForm : public CEICForm
{
private:
  TCloseQueryEvent m_pOldCloseQueryEvent;
  AnsiString       m_szOldCaption;
  bool             m_DestChildWin;

  void __fastcall EvOnCloseQuery(TObject* Sender, bool &CanClose);

protected:
  void __fastcall WMWindowPosChanged(TWMWindowPosChanged &Msg);
  void __fastcall WMEnable          (TWMEnable           &Msg);
  BEGIN_MESSAGE_MAP
    MESSAGE_HANDLER(WM_WINDOWPOSCHANGED, TWMWindowPosChanged, WMWindowPosChanged)
    MESSAGE_HANDLER(WM_ENABLE          , TWMEnable          , WMEnable          )
  END_MESSAGE_MAP(CEICForm)

public:
          __fastcall  CEICMainForm(TComponent* Owner);
  virtual __fastcall ~CEICMainForm(void);

  void __fastcall EvApplicationOnHint(TObject *Sender);

  __property AnsiString SaveCaption     = { read=m_szOldCaption, write=m_szOldCaption };
  __property bool       DestroyChildWin = { read=m_DestChildWin, write=m_DestChildWin };
  void __fastcall Redimensionner();  

__published:
};
//---------------------------------------------------------------------------
#endif
